package com.system.cacheClient.feign;

import com.system.cacheClient.common.CacheR;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * List缓存服务Feign客户端
 * 用于与缓存中心服务端进行通信
 */
@FeignClient(name = "cache-center-backend", path = "/cache/list")
public interface ListCacheFeignClient extends BaseCacheFeignClient {
    
    /**
     * 获取List缓存数据
     * @param key 缓存键
     * @return List缓存数据
     */
    @Override
    @GetMapping("/{key}")
    <T> CacheR<T> get(@PathVariable("key") String key);
    
    /**
     * 设置List缓存数据
     * @param key 缓存键
     * @param data List缓存数据
     * @return 操作结果
     */
    @Override
    @PostMapping("/{key}")
    <T> CacheR<Boolean> set(@PathVariable("key") String key, @RequestBody T data);
    
    /**
     * 删除List缓存数据
     * @param key 缓存键
     * @return 操作结果
     */
    @Override
    @DeleteMapping("/{key}")
    CacheR<Boolean> delete(@PathVariable("key") String key);
    
    /**
     * 设置List缓存过期时间
     * @param key 缓存键
     * @param timeout 过期时间（秒），0表示立即过期
     * @return 操作结果
     */
    @Override
    @PostMapping("/{key}/expire")
    CacheR<Boolean> expire(@PathVariable("key") String key, @RequestParam("timeout") long timeout);
    
    /**
     * List类型左侧弹出元素
     * @param key 列表键
     * @return 弹出的元素
     */
    @PostMapping("/{key}/lpop")
    <T> CacheR<T> lpop(@PathVariable("key") String key);
    
    /**
     * List类型右侧弹出元素
     * @param key 列表键
     * @return 弹出的元素
     */
    @PostMapping("/{key}/rpop")
    <T> CacheR<T> rpop(@PathVariable("key") String key);
}